package mapelements.background;

import mapelements.MapElement;
import mapelements.Renderer;



/**rappresenta il Background di una mappa. Viene definito Background la porzione
 * di spazio che viene utilizzata per riempire tutta la parte della mappa su cui non viene disegnato alcun
 * ForeGround in modo da rendere la mappa rettangolare.
 * Nella mappa il Background e' stato colorato di blu
 * <p>
 * <img src="background.png" alt="image not found"/>
 * 
 * @author koldar
 * @version 1.4
 * @see ForeGround
 */
public class Background<RENDERER extends Renderer> extends MapElement<RENDERER>{

	private static final long serialVersionUID = 8964759736493456419L;
	
	private transient BackgroundEventDispatcher dispatcher;
	
	/**costruisce un nuovo background con il Renderer passato come parametro
	 * 
	 * @param r il renderer che rappresenterà questo background
	 */
	public Background(RENDERER r) {
		super(r);
		this.dispatcher=new BackgroundEventDispatcher();
	}
	
	/**costruisce un nuovo background con un renderer nullo
	 * 
	 */
	public Background(){
		this(null);
	}
	
	/**aggiunge la classe passata come parametro alla lista di classi interessate ai cambiamenti del Background
	 * 
	 * @param listener
	 */
	public void addBackgroundListener(BackgroundListener listener){
		this.dispatcher.addBackgroundListener(listener);
	}
	/**rimuove la classe passata come parametro dalla lista di classi interessate ai cambiamenti del Background
	 * 
	 * @param listener
	 */
	public void removeBackgroundListener(BackgroundListener listener){
		this.dispatcher.removeBackgroundListener(listener);
	}
	/**lancia eventi di tipo BackgroundEvent a tutte le classi interessate ai cambiamenti di questo background.
	 * 
	 * @param action il tipo di azione che ha causato la modifica del Background
	 */
	protected void fireBackgroundEvent(int action){
		this.dispatcher.fireBackgroundEvent(this,action);
	}
	/**lancia {@link #fireBackgroundEvent(int)} con parametro <tt>BackgroundEvent.UNKNOWN</tt>
	 * 
	 */
	protected void fireBackgroundEvent(){
		this.fireBackgroundEvent(BackgroundEvent.UNKNOWN);
	}
	
	public Background clone() throws CloneNotSupportedException{
		Background result=(Background<RENDERER>)super.clone();
		result.dispatcher=this.dispatcher.clone();
		return result;
	}
	
}